import path from "path"
import tailwindcss from "@tailwindcss/vite"
import react from "@vitejs/plugin-react"
import { defineConfig, loadEnv } from "vite"

// https://vite.dev/config/
export default defineConfig(({ mode }) => {
  // 加载环境变量
  const env = loadEnv(mode, process.cwd(), '')
  
  // 从环境变量读取允许的主机列表
  const getAllowedHosts = () => {
    const allowAll = env.VITE_ALLOW_ALL_HOSTS === 'true';
    
    // 如果允许所有主机，返回 undefined（不设置限制）
    if (allowAll) {
      return undefined;
    }
    
    const hostsSet = new Set<string>(['localhost', '.local', '.localhost']);
    
    // 从 VITE_API_BASE_URL 提取域名
    const apiUrl = env.VITE_API_BASE_URL;
    if (apiUrl) {
      try {
        const url = new URL(apiUrl);
        const hostname = url.hostname;
        if (hostname !== 'localhost' && hostname !== '127.0.0.1') {
          // 添加主域名和带点号前缀的域名（匹配所有子域名）
          hostsSet.add(hostname);
          hostsSet.add(`.${hostname}`);
        }
      } catch (e) {
        // 静默处理错误
      }
    }
    
    // 允许从环境变量添加额外的主机
    const extraHosts = env.VITE_ALLOWED_HOSTS;
    if (extraHosts) {
      extraHosts.split(',').forEach(host => {
        const trimmed = host.trim();
        if (trimmed) {
          hostsSet.add(trimmed);
          // 如果没有点号前缀，也添加带点号的版本
          if (!trimmed.startsWith('.')) {
            hostsSet.add(`.${trimmed}`);
          }
        }
      });
    }
    
    return Array.from(hostsSet);
  };

  return {
    plugins: [react(), tailwindcss()],
    resolve: {
      alias: {
        "@": path.resolve(__dirname, "./src"),
      },
    },
    server: {
      host: env.VITE_SERVER_HOST || '0.0.0.0',
      port: parseInt(env.VITE_SERVER_PORT || '5173'),
      strictPort: false,
      allowedHosts: getAllowedHosts(),
    },
  }
})